package com.bana.fvs.protocol;

import com.bana.fvs.code.*;
import com.bana.fvs.model.Controller;
import com.bana.fvs.model.Lamp;

import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * 查询雾灯状态
 */
public class QueryLampStatus {

    public int getId()
    {
        return 0x0b;
    }

    public byte[] toBuffer(int kzqbsm,int wdbm)
    {
        byte[] buffer=new byte[6];
        buffer[0]=(byte)0x81;
        buffer[1]=(byte)kzqbsm;
        buffer[2]=(byte)getId();
        buffer[3]=(byte)(wdbm%128);
        buffer[4]=(byte)(wdbm/128);
        buffer[5]=(byte)0xff;
        return buffer;
    }

    public Lamp toModel(byte[] buffer) throws IOException {
        ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
        DataInputStream dis = new DataInputStream(bais);

        dis.skipBytes(1);

        Lamp lamp=new Lamp();
        byte kzqbsm=dis.readByte();
        lamp.setKzqbsm(kzqbsm);

        dis.skipBytes(1);

        short s4=dis.readByte();
        short s5=dis.readByte();
        lamp.setWdbm(s5*128+s4);

        short s6=dis.readByte();
        lamp.setWdljzt(LampStatus.Normal);
        lamp.setMzt((s6&0x02)==0?LampDoorStatus.Normal:LampDoorStatus.Steal);
        lamp.setWdzt((s6&0x04)==0?LampTemperatureStatus.Normal:LampTemperatureStatus.TooHigh);
        lamp.setDyzt((s6&0x08)==0?LampVoltageStatus.Normal:LampVoltageStatus.TooLow);
        lamp.setSbpd((s6&0x10)==0?LampPairStatus.Normal:LampPairStatus.Disconnection);
        lamp.setLedzt((s6&0x20)==0?LampLedStatus.Close:LampLedStatus.Open);
        lamp.setLdzt((s6&0x40)==0?LampRadarStatus.Close:LampRadarStatus.Open);

        short s7=dis.readByte();
        lamp.setDdyzt((s7&0x40)==0?LampVoltageStatus.Normal:LampVoltageStatus.TooLow);

        short s8=dis.readByte();
        short s9=dis.readByte();
        lamp.setXdcdy(s9*128+s8);
        short s10=dis.readByte();
        short s11=dis.readByte();
        lamp.setTyndy(s11*128+s10);
        short s12=dis.readByte();
        short s13=dis.readByte();
        if(s13==0)
        {
            lamp.setWdwd(s12);
        }
        else
        {
            lamp.setWdwd(-s12);
        }

        if(lamp.getMzt()==LampDoorStatus.Normal&&
                lamp.getWdzt()==LampTemperatureStatus.Normal&&
                lamp.getDyzt()==LampVoltageStatus.Normal&&
                lamp.getWdljzt()==LampStatus.Normal)
        {
            lamp.setSbzt(DeviceStatus.Noraml);
        }
        else
        {
            lamp.setSbzt(DeviceStatus.Error);
        }
        dis.close();
        bais.close();
        return lamp;
    }
}
